package com.zbkj.service.config;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class PdfToImageWithPathPrinter {

    /**
     * 将PDF转换为图片并返回图片路径列表
     * @param pdfPath PDF文件路径
     * @param outputDir 输出目录
     * @param dpi 图片分辨率(建议300)
     * @param format 图片格式(png/jpg等)
     * @return 生成的图片路径列表
     */
    public static String convertPdfToImages(String pdfPath, String outputDir, int dpi, String format)
            throws IOException {

        String imagePaths = "";



        // 确保输出目录存在
        Path outputPath = Paths.get(outputDir);
        if (!Files.exists(outputPath)) {
            Files.createDirectories(outputPath);
        }

        // 获取PDF文件名(不含扩展名)
        String pdfName = new File(pdfPath).getName().replaceFirst("[.][^.]+$", "");

        try (PDDocument document = PDDocument.load(new File(pdfPath))) {
            PDFRenderer pdfRenderer = new PDFRenderer(document);

            for (int page = 0; page < document.getNumberOfPages(); ++page) {
                // 渲染PDF页面为图片
                BufferedImage image = pdfRenderer.renderImageWithDPI(page, dpi);

                // 生成输出文件路径
                /*String imagePath = Paths.get(outputDir,
                        String.format("%s_page_%d.%s", pdfName, page + 1, format)).toString();*/

                String imagePath = Paths.get(outputDir,
                        String.format(pdfName+".png")).toString();

                // 保存图片
                ImageIO.write(image, format, new File(imagePath));
                imagePaths = imagePath;
                //imagePaths.add(imagePath);

                // 打印当前生成的图片路径
                System.out.println("已生成图片: " + imagePath);
            }
        }

        return imagePaths;
    }

    public static void main(String[] args) {
        // 示例用法
        String pdfPath = "example.pdf";  // 替换为你的PDF文件路径
        String outputDir = "output_images";  // 输出目录
        int dpi = 300;  // 图片分辨率
        String format = "png";  // 图片格式

        try {
            System.out.println("开始转换PDF到图片...");
            String s = convertPdfToImages(pdfPath, outputDir, dpi, format);

           /* System.out.println("\n转换完成！共生成 " + generatedImages.size() + " 张图片");
            System.out.println("所有图片路径:");
            generatedImages.forEach(System.out::println);*/

        } catch (IOException e) {
            System.err.println("转换过程中发生错误:");
            e.printStackTrace();
        }
    }
}